package cn.edu.cug.cs.gtl.docsrv.img.service;

import cn.edu.cug.cs.gtl.docsrv.img.catalog.CatalogTree;
import cn.edu.cug.cs.gtl.mybatis.mapper.img.ImgAll;
import cn.edu.cug.cs.gtl.mybatis.mapper.img.ImgItem;
import cn.edu.cug.cs.gtl.mybatis.mapper.img.ImgAll;
import cn.edu.cug.cs.gtl.mybatis.mapper.img.ImgCatalog;
import cn.edu.cug.cs.gtl.protos.Document;
import cn.edu.cug.cs.gtl.protos.DocumentList;
import org.locationtech.jts.geom.Envelope;

import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.util.List;

public interface ImgService {
    /** 
     服务名称：addImg
     功能描述：单个本地Img文件入库
     接口描述： /api/img/addImg
     传入参数：
     ImgAll  img；前端传入ImgAll的JSON对象
     返回值：
     成功返回true , 否则返回false
     调用示例：
     */
    void addImg(ImgAll imgAll);


    /** 
     服务名称：addImgs
     功能描述：多个本地IMG文件入库
     接口描述： /api/img/ addImgs
     传入参数：
     List<ImgAll>  imgs；前端传入ImgAll列表的JSON对象
     返回值：
     成功返回true , 否则返回false
     调用示例：
     */
    void addImgs(List<ImgAll> ls);

    /** 
     服务名称：addFromRawDB
     功能描述：从原始数据库中提取指定类型的图像文件入库
     接口描述： /api/img/addFromRawDB
     传入参数：
     String imgType   图像类型，文件后缀；
     返回值：
     成功返回true , 否则返回false
     调用示例：
     */
    boolean addFromRawDB();

    /**
     服务名称：getImgByName
     功能描述：图像数据库中提取指定名称的图像文件
     接口描述： /api/img/getImgByName
     传入参数：
     String imgName   图像名称；
     返回值：
     List<ImgAll> imgAllList 的JSON字符串
     调用示例：
     */
    List<ImgAll> getImgByName(String imgName);

    /**
     服务名称：getImgByEnTitle
     功能描述：图像数据库中提取指定英文名称的图像文件
     接口描述： /api/img/ getImgByEnTitle
     传入参数：
     String enTitle ；
     返回值：
     List<ImgAll> imgAllList 的JSON字符串
     调用示例：
     */
    List<ImgAll> getImgByEnTitle(String enTitle);


    /**
     服务名称：getImgByCnTitle
     功能描述：图像数据库中提取指定中文名称的图像文件
     接口描述： /api/img/ getImgByCnTitle
     传入参数：
     String cnTitle ；
     返回值：
     List<ImgAll> imgAllList 的JSON字符串
     调用示例：
     */
    List<ImgAll> getImgByCnTitle(String cnTitle);



    /**
     服务名称：getImgByInternalId
     功能描述：图像数据库中提取指定ID的图像文件
     接口描述： /api/img/getImgByInternalId
     传入参数：
     long internalId；
     返回值：
     ImgAll  img     ; ImgAll的JSON字符串
     调用示例：
     */
    ImgAll getImgByInternalId(BigDecimal internalId);


    /**
     服务名称：getImgByBoundingBox
     功能描述：图像数据库中提取指定范围的图像
     接口描述： /api/img/getImgByBoundingBox
     传入参数：
     String bb；//minx,maxx,miny,maxy  数字之间逗号分隔
     String mask; //intersect 相交的图像； 或  contains 包含的图像
     返回值：
     List<ImgAll> imgAllList 的JSON字符串
     调用示例：
     */
    List<ImgAll> getImgByBoundingBox(String bb,  String mask);

    /**
     服务名称：deleteImgByInternalId
     功能描述：删除图像数据库中指定ID的图像
     接口描述： /api/img/deleteImgByInternalId
     传入参数：
     long internalId；
     返回值：
     成功返回true , 否则返回false
     调用示例：
     */
    boolean deleteImgByInternalId(BigDecimal internalId);





    /**
     * 服务名称：getImagesByImgInternalId
     * 功能描述：图像数据库中提取指定Img的几何对象
     * 接口描述： /api/img/getImagesByImgInternalId
     * 传入参数：
     *  long imgInternalId
     * 返回值：
     *  IamgeJSON的列表
     * 调用示例：
     *
     * @param imgInternalId
     */
    List<String> getImagesByImgInternalId(BigDecimal imgInternalId);


    /**
     * 服务名称：getEnvelopeByImgInternalId
     * 功能描述：图像数据库中提取指定范围的几何对象
     * 接口描述： /api/img/getEnvelopeByImgInternalId
     * 传入参数：
     * long imgInternalId
     * 返回值：
     * Envelope
     * 调用示例：
     *
     * @param imgInternalId
     */
    Envelope getEnvelopeByImgInternalId(BigDecimal imgInternalId) ;



    /**
     * 服务名称：getImgCatalogs
     * 功能描述：图像数据库中提取所有分类
     * 接口描述： /api/img/getImgCatalogs
     * 传入参数：
     * 返回值：
     * List<ImgCatalog> catalogs
     * 调用示例：
     */
    List<ImgCatalog> getImgCatalogs();


    /**
     服务名称：getDocumentByImgInternalId
     功能描述：图像数据库中提取指定Img文档
     接口描述： /api/img/getDocumentByImgInternalId
     传入参数：
     long imgInternalId
     返回值：
     Document doc;
     其中，每个Feature的GeoJSON字符串为Document的一个content；
     其他的不为空的字段为该Img文档的元数据。
     调用示例：
     http://localhost:8090/api/img/getDocumentByImgInternalId?imgInternalId=3
     */
    Document getDocumentByImgInternalId(BigDecimal imgInternalId);

    /**
     服务名称：getDocumentsByCatalogInternalId
     功能描述：图像数据库中提取指定分类ID的所有图像文档
     接口描述：/api/img/getDocumentsByCatalogInternalId
     传入参数：
     BigDecimal catalogInternalId
     返回值：
     DocumentList docList;
     其中，每个Feature的GeoJSON字符串为Document的一个content；
     其他的不为空的字段为该Img文档的元数据。
     调用示例：
     http://localhost:8090/api/img/getDocumentsByCatalogInternalId?catalogInternalId=3
     */
    DocumentList getDocumentsByCatalogInternalId(BigDecimal catalogInternalId);

    /**
     * 将所有的目录整理成一个树后返回
     * @return
     */
    CatalogTree getCatalogTree();

    List<BigDecimal> getImgInternalIdsByCatalogInternalId(BigDecimal catalogId);

}
